条件付きフォーマット
メッセージのフォーマットは、特定の条件下でのみ適用されるように設定することも可能です。 例えばメッセージレベルに応じて、メッセージ表示を特化することができます。 条件文は、次の形式で入力できます。
<false condition>
の指定は任意で、指定しない場合は何も表示されません。 <condition>
フィールドは、文字、および必要に応じて条件演算子と値で構成されています。
以下の条件変数は、任意の値を保持することができます。そして、関係演算子を使用してテストする必要があります。
c |
列番号 |
g |
メッセージレベル |
l |
行番号 |
n |
メッセージ番号 |
S |
抑止のタイプ |
u |
コンテキストメッセージの深さ |
Y |
重要度レベル |
メッセージレベル(%g)の有効な値:
0 |
情報 |
1 |
警告 |
2 |
エラー |
3 |
ユーザメッセージ |
例えば、レベル2メッセージに Err 、それ以外にはMsgと表示させる条件文は、次のようになります。
プライマリメッセージは、深さゼロのコンテキストメッセージを持ち、コンテキストメッセージはレベル1、もしくはそれ以上になります。 したがって、コンテキストメッセージの典型的な条件付き処理は次のようになります。
以下の条件変数は、その値に変更があるかどうかのみをテストすることができます。
C |
ファイル名、行番号、列番号 |
F |
ファイル名 |
L |
ファイル名と行番号 |
例えば、ファイル名の簡単なチェックは、次のとおりです。
この例では、ファイル名 (F) が変わった場合、新しいファイル名は新しい行 (\n%f)に表示されます。 条件変数Cは、警告位置キャレット(^)の位置を決定するために使用することができます。 デフォルトのメッセージ形式では、キャレット(^)は、前のメッセージと同じ場所のために省略されています。 これを再現するには、次の条件付きステートメントを使用します。
この文は、前のメッセージと現在のメッセージのファイル名、行と列の数(C)を比較します。 場所が異なる場合、文はtrue とみなされ、キャレットが表示され暗黙のうちに追加された新しい行が続きます。
最後に、これらのブール条件変数とメッセージのプロパティを照会できます。
h |
メッセージはハードエラーですか(レベル9) ? |
j |
抑止がありますか? |
v |
詳細なテキストが存在しますか? |
例えば、(%?v)
が存在する場合、新しい行(\n%v)
の詳細なメッセージテキストに続いて、%t%?v%(\n%v%)
はメッセージテキスト(%t)
を出力します。
%j
条件がトリガされます。